/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fait.ferm.persists;

import fait.ferm.global.Glob;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.sql.Date;

/**
 *
 * @author alex
 */
public class Equipment  extends PersistsObject{
	
	public Ferm ferm;
	public SimpleDirItem equipment_type_id;
	public Date date_purchase;
	public double percent_wear;

	/**
	 * Создается  пустой объект, которого нет в БД
	 * 
	 */
	public Equipment(){
		super();
		table = "equipment";
		ferm = Glob.getFerm();
		equipment_type_id = Glob.emptyDirItem;
		date_purchase = Glob.getGame().current_date;
		percent_wear = 0.0;
	}
	/**Создается объект из БД по id. Данные загружаются из БД
	 * @param pid id фермы
	 * @throws Exception
	 */
	public Equipment(int pid) throws Exception {
		super(pid);
		table = "equipment";
		ferm = Glob.getFerm();
		load();
	}

	/**
	 * Загружает параметры объекта из БД, если id > 0
	 * @throws Exception
	 */
	@Override
	public void load() throws Exception {
		ResultSet rs=null;
		boolean notSuccessfully=true;
		if(id==-1) {
			throw new Exception("Объект "+table+" отсутствует в базе");
		}	
		try (Statement st = con.createStatement()) {
			String q = "SELECT ferm_id, equipment_type_id, date_purchase, percent_wear "+
				"FROM "+table+" WHERE id = " + id;
			rs = st.executeQuery(q);
			if(rs.next()){
				notSuccessfully=false;
				if(ferm.getId()!=rs.getInt("ferm_id")) {
					throw new Exception("Объект не из этой игры");
				}
				equipment_type_id = Glob.getObjInCache("equipment_type", rs.getInt("equipment_type_id"));
				date_purchase = Date.valueOf(rs.getString("date_purchase"));
				percent_wear = rs.getDouble("percent_wear");
			}
		}finally{
			rs.close();
		}

		if(notSuccessfully) {
			throw new Exception("Объект "+table+" не загружен");
		}	
	}
	public SimpleDirItem get_equipment_type() {
        return Glob.getDirInCache("equipment_type").get(equipment_type_id.getId());
    }
    
    public ArrayList<Equipment_staff> get_arr_equipment_staff() throws Exception {
        ArrayList<Equipment_staff> al = new ArrayList<>();
        String table = "equipment_staff";
        
                try (Statement st = con.createStatement()) {
                        String q = "SELECT id FROM "+table+" WHERE equipment_type_id = " + equipment_type_id;
                        ResultSet rs = st.executeQuery(q);
                        while(rs.next()){
                al.add(new Equipment_staff(rs.getInt("id")));
                        }
                        rs.close();
                }
        
        return al;
    }

	/**
	 * Обновляет параметры объекта в БД
	 * @throws SQLException
	 */
	@Override
	protected void update() throws SQLException {
		try (Statement st = con.createStatement()) {
			String q = "UPDATE "+table+" SET " + 
					"equipment_type_id=" + equipment_type_id.getId() +"," +
					"date_purchase='" + date_purchase.toString() +"'," +
					"percent_wear=" + percent_wear +" " +
					"WHERE id="+id;
			st.executeUpdate(q);
		}
	}
	/**
	 * Создает новую запись в БД с параметрами объекта. 
	 * При этом генерируется новый id объекта
	 * @throws SQLException
	 */

	@Override
	protected void createNew() throws SQLException,Exception {
		try (Statement st = con.createStatement()) {
			String q = "INSERT INTO "+table+" ( ferm_id, equipment_type_id, date_purchase,percent_wear ) VALUES("+ 
					Glob.getFerm().getId() + "," +
					equipment_type_id.getId() +",'" +
					date_purchase.toString() +"'," +
					percent_wear + ")";
			st.executeUpdate(q);
			q="SELECT seq FROM sqlite_sequence WHERE name = '"+table+"'";
			ResultSet rs = st.executeQuery(q);
			if(rs.next()){
				id = rs.getInt("seq");
			}
			rs.close();
		}
	}
	
	@Override
	public String toString(){
		return equipment_type_id.getName() + ": "+date_purchase.toString();
	}
	
}
